package designModel;

public class Summary {
    public static void main(String[] args) {
// 23种模式概述  =>  总结出常见问题的 通用解决方案
//（1）创建型模式：10种模式重点掌握
//        简单工厂：一个工厂类根据传入的参量决定创建出那一种产品类的实例。工厂方法：定义一个创建对象的接口，让子类决定实例化那个类。☆☆☆☆☆
//
//        抽象工厂：创建相关或依赖对象的家族，而无需明确指定具体类。
//
//        建造者模式：封装一个复杂对象的构建过程，并可以按步骤构造。☆☆☆☆☆
//
//        单例模式：某个类只能有一个实例，提供一个全局的访问点。 ☆☆☆☆☆
//
//        原型模式：通过复制现有的实例来创建新的实例。
//
//（2）结构型模式
//
//        外观模式：对外提供一个统一的方法，来访问子系统中的一群接口。
//
//        桥接模式：将抽象部分和它的实现部分分离，使它们都可以独立的变化。
//
//        组合模式：将对象组合成树形结构以表示“”部分-整体“”的层次结构。
//
//        装饰模式：动态的给对象添加新的功能。☆☆☆☆☆
//
//        代理模式：为其他对象提供一个代理以便控制这个对象的访问。☆☆☆☆☆
//
//        适配器模式：将一个类的方法接口转换成客户希望的另外一个接口。☆☆☆☆☆
//
//        亨元（蝇量）模式：通过共享技术来有效的支持大量细粒度的对象。
//
//（3）行为型模式
//        模板模式：定义一个算法结构，而将一些步骤延迟到子类实现。☆☆☆☆☆
//
//        解释器模式：给定一个语言，定义它的文法的一种表示，并定义一个解释器。
//
//        策略模式：定义一系列算法，把他们封装起来，并且使它们可以相互替换。☆☆☆☆☆
//
//        状态模式：允许一个对象在其对象内部状态改变时改变它的行为。
//
//        观察者模式：对象间的一对多的依赖关系。☆☆☆☆☆
//
//        备忘录模式：在不破坏封装的前提下，保持对象的内部状态。
//
//        中介者模式：用一个中介对象来封装一系列的对象交互。
//
//        命令模式：将命令请求封装为一个对象，使得可以用不同的请求来进行参数化。
//
//        访问者模式：在不改变数据结构的前提下，增加作用于一组对象元素的新功能。
//
//        责任链模式：将请求的发送者和接收者解耦，使的多个对象都有处理这个请求的机会。☆☆☆☆☆
//
//        迭代器模式：一种遍历访问聚合对象中各个元素的方法，不暴露该对象的内部结构。☆☆☆☆☆

//        UML 类图 了解

//        7大原则

//        单一职责原则(Single Responsibility Principle)。一个类或方法应只负责一项职责，降低类的复杂度，提高可维护性。
//        依赖倒置（倒转）原则(Dependence Inversion Principle)。高层模块不应依赖低层模块，两者都应依赖其抽象。抽象不应依赖细节，细节应依赖抽象。(参数 传接口，或者构造器传实例,set方法传实例,根据具体实例做对应的事情)
//        接口隔离原则(Interface Segregation Principle)。建立单一接口，客户端不应依赖它不需要的接口。类间依赖关系应建立在最小的接口上。简述:拆接口，多实现
//        里氏替换原则(Liskov Substitution Principle)。子类可以扩展父类的功能，但不能改变父类原有的功能。子类应尽量透明地替换父类。尽可能避免 重写父类方法 (将父类再向上抛一层,父子变兄弟)
//        开闭原则(Open Closed Principle)。对扩展开放，对修改关闭。即软件实体应通过扩展而非修改来适应变化。

//        迪米特原则(Law of Demeter)。一个对象应尽量少地与其他对象交互。降低类间的耦合度。与你的直接朋友(方法返回值  方法参数 成员变量)通信，局部变量尽量少 直接用其他类 new Object

//        合成复用原则(Composite Reuse Principle)。尽量使用 依赖(传参) 组合(set 设值) 聚合(去new) ，而不是继承来达到重用目的。
    }
}


/*
        设计模式主要分三个类型:创建型、结构型和行为型。
        其中创建型有：
        一、Singleton，单例模式：保证一个类只有一个实例，并提供一个访问它的全局访问点   ☆☆☆☆☆
        二、Abstract Factory，抽象工厂：提供一个创建一系列相关或相互依赖对象的接口，而无须指定它们的具体类。
        三、Factory Method，工厂方法：定义一个用于创建对象的接口，让子类决定实例化哪一个类，Factory Method使一个类的实例化延迟到了子类。☆☆☆☆☆
        四、Builder，建造模式：将一个复杂对象的构建与他的表示相分离，使得同样的构建过程可以创建不同的表示。  ☆☆☆☆☆
        五、Prototype，原型模式：用原型实例指定创建对象的种类，并且通过拷贝这些原型来创建新的对象。


        行为型有：
        六、Iterator，迭代器模式：提供一个方法顺序访问一个聚合对象的各个元素，而又不需要暴露该对象的内部表示。  ☆☆☆☆☆
        七、Observer，观察者模式：定义对象间一对多的依赖关系，当一个对象的状态发生改变时，所有依赖于它的对象都得到通知自动更新。  ☆☆☆☆☆
        八、Template Method，模板方法：定义一个操作中的算法的骨架，而将一些步骤延迟到子类中，TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。 ☆☆☆☆☆
        九、Command，命令模式：将一个请求封装为一个对象，从而使你可以用不同的请求对客户进行参数化，对请求排队和记录请求日志，以及支持可撤销的操作。
        十、State，状态模式：允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类
        十一、Strategy，策略模式：定义一系列的算法，把他们一个个封装起来，并使他们可以互相替换，本模式使得算法可以独立于使用它们的客户。☆☆☆☆☆
        十二、China of Responsibility，职责链模式：使多个对象都有机会处理请求，从而避免请求的送发者和接收者之间的耦合关系 ☆☆☆☆☆
        十三、Mediator，中介者模式：用一个中介对象封装一些列的对象交互。
        十四、Visitor，访问者模式：表示一个作用于某对象结构中的各元素的操作，它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。
        十五、Interpreter，解释器模式：给定一个语言，定义他的文法的一个表示，并定义一个解释器，这个解释器使用该表示来解释语言中的句子。
        十六、Memento，备忘录模式：在不破坏对象的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态。



        结构型有：
        十七、Composite，组合模式：将对象组合成树形结构以表示部分整体的关系，Composite使得用户对单个对象和组合对象的使用具有一致性。
        十八、Facade，外观模式：为子系统中的一组接口提供一致的界面，fa?ade提供了一高层接口，这个接口使得子系统更容易使用。
        十九、Proxy，代理模式：为其他对象提供一种代理以控制对这个对象的访问    ☆☆☆☆☆
        二十、Adapter,适配器模式：将一类的接口转换成客户希望的另外一个接口，Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。  ☆☆☆☆☆
        二十一、Decrator，装饰模式：动态地给一个对象增加一些额外的职责，就增加的功能来说，Decorator模式相比生成子类更加灵活。 ☆☆☆☆☆
        二十二、Bridge，桥接模式：将抽象部分与它的实现部分相分离，使他们可以独立的变化。
        二十三、Flyweight，享元模式
        */